--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
admin/manage.py main (dac94b89) Text, 2.46 KB
T8b949e#!/usr/bin/env python3
T8b949e# nomadForum - a forum on the NomadNetwork
T8b949e# Copyright (C) 2023-2026 AutumnSpark1226
T8b949e#
T8b949e# This program is free software: you can redistribute it and/or modify
T8b949e# it under the terms of the GNU General Public License as published by
T8b949e# the Free Software Foundation, either version 3 of the License, or
T8b949e# (at your option) any later version.
T8b949e#
T8b949e# This program is distributed in the hope that it will be useful,
T8b949e# but WITHOUT ANY WARRANTY; without even the implied warranty of
T8b949e# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
T8b949e# GNU General Public License for more details.
T8b949e#
T8b949e# You should have received a copy of the GNU General Public License
T8b949e# along with this program. If not, see <https://www.gnu.org/licenses/>.
Tff7b72import T7ee787os
Tff7b72import T7ee787shutil
Tff7b72import T7ee787sys
Tff7b72from T7ee787datetime Tff7b72import Te6edf3datetime
Te6edf3sysTff7b72.Td2a8ffpathTff7b72.Td2a8ffextendTb4b4b4(Tb4b4b4[Te6edf3osTff7b72.Td2a8ffpathTff7b72.Td2a8ffabspathTb4b4b4(Te6edf3osTff7b72.Td2a8ffpathTff7b72.Td2a8ffjoinTb4b4b4(Te6edf3osTff7b72.Td2a8ffpathTff7b72.Td2a8ffdirnameTb4b4b4(Tff7b72__file__Tb4b4b4)Tb4b4b4, Te6edf3osTff7b72.Td2a8ffpardirTb4b4b4)Tb4b4b4)Tb4b4b4]Tb4b4b4)
Tff7b72import T7ee787main
Tff7b72from T7ee787main Tff7b72import Te6edf3conf
Tff7b72def Td2a8ffprint_helpTb4b4b4(Tb4b4b4)Tb4b4b4:
Tffa657printTb4b4b4(Ta5d6ff"Ta5d6ffManagement optionsTa5d6ff"Tb4b4b4)
Tffa657printTb4b4b4(Tb4b4b4)
Tffa657printTb4b4b4(Ta5d6ff"Ta5d6ffBackupTa5d6ff"Tb4b4b4)
Tffa657printTb4b4b4(Ta5d6ff"Ta5d6ff backup - create a backupTa5d6ff"Tb4b4b4)
Tffa657printTb4b4b4(Tb4b4b4)
Tffa657printTb4b4b4(Ta5d6ff"Ta5d6ffEncryptionTa5d6ff"Tb4b4b4)
Tffa657printTb4b4b4(Ta5d6ff"Ta5d6ff addkey - adds a new key to the list of encryption keysTa5d6ff"Tb4b4b4)
Tffa657printTb4b4b4(Ta5d6ff"Ta5d6ff rotatekeys - rotataes (reencrypts) all encrypted dataTa5d6ff"Tb4b4b4)
Tff7b72def Td2a8ffcreate_backupTb4b4b4(Te6edf3suffixTb4b4b4: Tffa657strTb4b4b4)Tb4b4b4:
T8b949e# TODO validate suffix (no "/", "..", etc.)
Te6edf3backup_file Tff7b72= Te6edf3confTff7b72.Td2a8ffstorage_path Tff7b72+ Ta5d6ff"Ta5d6ff/database.db.bakTa5d6ff" Tff7b72+ Te6edf3suffix
Te6edf3shutilTff7b72.Td2a8ffcopy2Tb4b4b4(Te6edf3confTff7b72.Td2a8ffstorage_path Tff7b72+ Ta5d6ff"Ta5d6ff/database.dbTa5d6ff"Tb4b4b4, Te6edf3backup_fileTb4b4b4)
Tffa657printTb4b4b4(Ta5d6fffTa5d6ff"Ta5d6ffdatabase backup copied to Tffd700{Te6edf3backup_fileTffd700}Ta5d6ff"Tb4b4b4)
Te6edf3backup_file Tff7b72= Te6edf3confTff7b72.Td2a8ffstorage_path Tff7b72+ Ta5d6ff"Ta5d6ff/key.secret.bakTa5d6ff" Tff7b72+ Te6edf3suffix
Te6edf3shutilTff7b72.Td2a8ffcopy2Tb4b4b4(Te6edf3confTff7b72.Td2a8ffstorage_path Tff7b72+ Ta5d6ff"Ta5d6ff/key.secretTa5d6ff"Tb4b4b4, Te6edf3backup_fileTb4b4b4)
Tffa657printTb4b4b4(Ta5d6fffTa5d6ff"Ta5d6ffencryption key(s) copied to Tffd700{Te6edf3backup_fileTffd700}Ta5d6ff"Tb4b4b4)
Tff7b72if Tff7b72__name__ Tff7b72== Ta5d6ff"Ta5d6ff__main__Ta5d6ff"Tb4b4b4:
Tff7b72tryTb4b4b4:
Tff7b72if Tff7b72__name__ Tff7b72== Ta5d6ff"Ta5d6ff__main__Ta5d6ff"Tb4b4b4:
Te6edf3mainTff7b72.Td2a8ffsetup_dbTb4b4b4(Tb4b4b4)
Tff7b72if Tffa657lenTb4b4b4(Te6edf3sysTff7b72.Td2a8ffargvTb4b4b4) Tff7b72== T79c0ff2Tb4b4b4:
Tff7b72if Te6edf3sysTff7b72.Td2a8ffargvTb4b4b4[T79c0ff1Tb4b4b4] Tff7b72== Ta5d6ff"Ta5d6ffaddkeyTa5d6ff"Tb4b4b4:
Te6edf3mainTff7b72.Td2a8ffadd_new_keyTb4b4b4(Tb4b4b4)
Tffa657printTb4b4b4(Ta5d6ff"Ta5d6ffAdded new key.Ta5d6ff"Tb4b4b4)
Tff7b72elif Te6edf3sysTff7b72.Td2a8ffargvTb4b4b4[T79c0ff1Tb4b4b4] Tff7b72== Ta5d6ff"Ta5d6ffrotatekeysTa5d6ff"Tb4b4b4:
Te6edf3mainTff7b72.Td2a8ffrotate_keysTb4b4b4(Tb4b4b4)
Tffa657printTb4b4b4(Ta5d6ff"Ta5d6ffRotated all keys.Ta5d6ff"Tb4b4b4)
Tff7b72elif Te6edf3sysTff7b72.Td2a8ffargvTb4b4b4[T79c0ff1Tb4b4b4] Tff7b72== Ta5d6ff"Ta5d6ffbackupTa5d6ff"Tb4b4b4:
Te6edf3now Tff7b72= Te6edf3datetimeTff7b72.Td2a8ffnowTb4b4b4(Tb4b4b4)
Te6edf3suffix Tff7b72= Te6edf3nowTff7b72.Td2a8ffstrftimeTb4b4b4(Ta5d6ff"Ta5d6ff%Ta5d6ffYTa5d6ff%Ta5d6ffmTffd700%dTa5d6ff_Ta5d6ff%Ta5d6ffH-Ta5d6ff%Ta5d6ffM-Ta5d6ff%Ta5d6ffSTa5d6ff"Tb4b4b4)
Te6edf3create_backupTb4b4b4(Te6edf3suffixTb4b4b4)
Tff7b72elseTb4b4b4:
Te6edf3print_helpTb4b4b4(Tb4b4b4)
Tff7b72elseTb4b4b4:
Te6edf3print_helpTb4b4b4(Tb4b4b4)
Te6edf3mainTff7b72.Td2a8ffclose_databaseTb4b4b4(Tb4b4b4)
Tff7b72exceptTb4b4b4:
Tffa657printTb4b4b4(Ta5d6ff"Ta5d6ffAn error occuredTa5d6ff"Tb4b4b4)
──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────